package thread;
/*synchronized(同步监视器对象){
 *     需要多个线程同步执行的代码片段(多线程会产生并发安全问题的代码)
 * }*/
public class SybcDemo2 {

    public static void main(String[] args) {
        Shop shop =new Shop();
        Thread t1 =new Thread("樵晚"){
            @Override
            public void run() {
               shop.buy();
            }
        };
        Thread t2 =new Thread("Rita.Rossweisse"){
            @Override
            public void run() {
                shop.buy();
            }
        };
        t1.start();
        t2.start();

    }
}

class Shop{
    public void buy(){
        try {
            Thread t =Thread.currentThread();//获取运行bug方法的线程

            System.out.println(t.getName()+":正在挑衣服...");
            Thread.sleep(5000);

            synchronized (this) {//synchronized(){}同步块只针对有需要的代码块进行锁门操作,()中的对象又叫同步监视对象
            //synchronized (new Object()) {//产生新的对象,跟调用方法的shop对象不一致,所以上锁效果失效了
            //synchronized ("qrml") {//String直接量储存在常量池中,一直是同一个,所以也能成功上锁,有效但是不合适,不建议自变量作为锁对象
                System.out.println(t.getName()+":正在试衣服...");
                Thread.sleep(5000);
            }

            System.out.println(t.getName()+":正在结账...");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}